home *** CD-ROM | disk | FTP | other *** search
/ PC Professionell 2006 May / PCpro_2006_05.ISO / files / mobile / fma-2.0-stable-setup.exe / {app} / source / uChatSMS.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  2004-07-14  |  5.5 KB  |  213 lines

  1. unit uChatSMS;
  2.  
  3. {
  4. *******************************************************************************
  5. * Descriptions: Text Messages Chat Window
  6. * $Source: /cvsroot/fma/fma/uChatSMS.pas,v $
  7. * $Locker:  $
  8. *
  9. * Todo:
  10. *
  11. * Change Log:
  12. * $Log: uChatSMS.pas,v $
  13. * Revision 1.3  2004/07/14 09:35:05  z_stoichev
  14. * - Fixed Chat Message enter text area height.
  15. *
  16. * Revision 1.2  2004/06/29 12:37:03  z_stoichev
  17. * New message window renamed
  18. *
  19. * Revision 1.1  2004/06/23 13:47:25  z_stoichev
  20. * Initial Chat support
  21. *
  22. *
  23. }
  24.  
  25. interface
  26.  
  27. uses
  28.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  29.   Dialogs, uComposeSMS, Menus, Placemnt, StdCtrls, ExtCtrls, TntStdCtrls,
  30.   ComCtrls, ToolWin, Buttons, TntComCtrls;
  31.  
  32. type
  33.   TfrmCharMessage = class(TfrmMessageContact)
  34.     SendButton: TButton;
  35.     TalkToPanel: TPanel;
  36.     Label1: TLabel;
  37.     lblName: TTntLabel;
  38.     sbLong: TSpeedButton;
  39.     Chat: TTntRichEdit;
  40.     Timer1: TTimer;
  41.     PopupMenu1: TPopupMenu;
  42.     Copy1: TMenuItem;
  43.     procedure FormCreate(Sender: TObject);
  44.     procedure Edit1Change(Sender: TObject);
  45.     procedure LongClick(Sender: TObject);
  46.     procedure MemoChange(Sender: TObject);
  47.     procedure SendClick(Sender: TObject);
  48.     procedure FormClose(Sender: TObject; var Action: TCloseAction);
  49.     procedure FormShow(Sender: TObject);
  50.     procedure FormActivate(Sender: TObject);
  51.     procedure Timer1Timer(Sender: TObject);
  52.   private
  53.     { Private declarations }
  54.     FOldMsg: WideString;
  55.     procedure SetChatContact(Who: WideString);
  56.   public
  57.     { Public declarations }
  58.     procedure EnableSending(WithError: boolean);
  59.     procedure AddChatText(SystemMessage: WideString); overload;
  60.     procedure AddChatText(Sender,Text: WideString; When: TDateTime; SystemMsg: boolean = False); overload;
  61.     function IsYourNumber(Number: string): boolean;
  62.   end;
  63.  
  64. var
  65.   frmCharMessage: TfrmCharMessage;
  66.  
  67. implementation
  68.  
  69. uses Unit1;
  70.  
  71. {$R *.dfm}
  72.  
  73. procedure TfrmCharMessage.FormCreate(Sender: TObject);
  74. begin
  75.   inherited;
  76.   lblName.Left := Label1.Left + Label1.Width + 4;
  77.   lblName.Font.Style := lblName.Font.Style + [fsBold];
  78.   //Chat.Font.Size := Chat.Font.Size + 1;
  79.   FOldMsg := '';
  80.   FChatMode := True;
  81. end;
  82.  
  83. procedure TfrmCharMessage.Edit1Change(Sender: TObject);
  84. begin
  85.   inherited;
  86.   SetChatContact(Edit1.Text);
  87. end;
  88.  
  89. procedure TfrmCharMessage.LongClick(Sender: TObject);
  90. begin
  91.   inherited;
  92.   sbLong.Down := btnLongSMS.Down;
  93. end;
  94.  
  95. procedure TfrmCharMessage.MemoChange(Sender: TObject);
  96. begin
  97.   inherited;
  98.   SendButton.Enabled := Memo.Lines.Count <> 0;
  99. end;
  100.  
  101. procedure TfrmCharMessage.SendClick(Sender: TObject);
  102. begin
  103.   Timer1.Enabled := False;
  104.   SendButton.Enabled := False;
  105.   inherited;
  106.   Memo.Color := clBtnFace;
  107.   Memo.ReadOnly := True;
  108. end;
  109.  
  110. procedure TfrmCharMessage.AddChatText(Sender, Text: WideString;
  111.   When: TDateTime; SystemMsg: boolean);
  112. var
  113.   col: TColor;
  114. begin
  115.   if SystemMsg then begin
  116.     { System message, do not allow dublicates }
  117.     if WideCompareText(FOldMsg,Text) = 0 then
  118.       exit;
  119.     FOldMsg := Text;
  120.     col := clGray;
  121.   end
  122.   else begin
  123.     FOldMsg := '';
  124.     if Sender = '' then begin
  125.       { Outgoing SMS }
  126.       EnableSending(False);
  127.       Sender := 'Me';
  128.       col := clRed;
  129.     end
  130.     else
  131.       { Incoming SMS }
  132.       col := clNavy;
  133.   end;
  134.   Chat.SelStart := Length(Chat.Text);
  135.   Chat.SelAttributes.Color := col;
  136.   if not SystemMsg then begin
  137.     Chat.SelAttributes.Style := Chat.SelAttributes.Style + [fsBold];
  138.     Chat.SelText := FormatDateTime('hh:nn',When)+' '+Form1.ExtractContact(Sender)+': ';
  139.     Chat.SelStart := Length(Chat.Text);
  140.     Chat.SelAttributes.Style := Chat.SelAttributes.Style - [fsBold];
  141.   end;
  142.   Chat.SelText := Text + #13#10;
  143.   Chat.SelStart := Length(Chat.Text);
  144. end;
  145.  
  146. procedure TfrmCharMessage.FormClose(Sender: TObject;
  147.   var Action: TCloseAction);
  148. begin
  149.   inherited;
  150.   Action := caFree;
  151. end;
  152.  
  153. function TfrmCharMessage.IsYourNumber(Number: string): boolean;
  154. begin
  155.   Result := WideCompareText(Form1.ExtractContact(lblName.Caption),Form1.LookupContact(Number)) = 0;
  156. end;
  157.  
  158. procedure TfrmCharMessage.SetChatContact(Who: WideString);
  159. begin
  160.   Edit1.Text := Who;
  161.   lblName.Caption := Who;
  162.   //Caption := 'Chatting with '+Who;
  163. end;
  164.  
  165. procedure TfrmCharMessage.FormShow(Sender: TObject);
  166. begin
  167.   inherited;
  168.   Memo.Top := StatusBar.Top - Memo.Height - 1;
  169.   SendButton.Top := Memo.Top;
  170.   Chat.Height := Memo.Top - Chat.Top - 2;
  171.   AddChatText('(do not send any confidential information as passwords via your phone using text messages)');
  172. end;
  173.  
  174. procedure TfrmCharMessage.EnableSending(WithError: boolean);
  175. begin
  176.   Memo.Color := clWindow;
  177.   Memo.ReadOnly := False;
  178.   Memo.SetFocus;
  179.   Memo.Text := '';
  180.   MemoChange(nil);
  181.   if WithError then begin
  182.     AddChatText('(Sending delayed, will try to send it later)');
  183.     StatusBar.Panels[2].Text := '';
  184.   end
  185.   else
  186.     StatusBar.Panels[2].Text := Format('Total messages sent: %d',[Form1.FSMSCounter]);
  187.   Timer1.Enabled := True;
  188. end;
  189.  
  190. procedure TfrmCharMessage.FormActivate(Sender: TObject);
  191. begin
  192.   inherited;
  193.   if WarningPanel.Visible then 
  194.     Chat.Top := WarningPanel.Top + WarningPanel.Height
  195.   else
  196.     Chat.Top := TalkToPanel.Top + TalkToPanel.Height;
  197.   Timer1.Enabled := True;
  198. end;
  199.  
  200. procedure TfrmCharMessage.AddChatText(SystemMessage: WideString);
  201. begin
  202.   AddChatText('',SystemMessage,0,True);
  203. end;
  204.  
  205. procedure TfrmCharMessage.Timer1Timer(Sender: TObject);
  206. begin
  207.   inherited;
  208.   Timer1.Enabled := False;
  209.   StatusBar.Panels[2].Text := '';
  210. end;
  211.  
  212. end.
  213.